package com.extension.company.model.api;

import com.extension.company.model.entity.AddMyShopCart;
import com.extension.company.model.entity.CarShopBean;
import com.extension.company.model.entity.GoodsInfoDetail2;
import com.extension.company.model.entity.OrderConfirmBean;
import com.extension.company.model.entity.OrderConfirmCarListBean;
import com.extension.company.model.entity.PaySuccessBean;
import com.extension.company.model.entity.ProvinceCityBean;
import com.extension.company.model.entity.HotDataListBean;
import com.extension.company.model.entity.RetailGoosListBean;
import com.extension.company.model.entity.TokenBean;
import com.extension.company.model.entity.ListHeadBean;
import com.extension.company.model.entity.LoginBean;
import com.extension.company.model.entity.LoginQuite;
import com.extension.company.model.entity.LeftListBean;
import com.extension.company.model.entity.RightListBean;
import com.extension.company.model.entity.MessageBean;
import com.extension.company.model.entity.AddressListData;
import com.extension.company.model.entity.AddressListDelData;
import com.extension.company.model.entity.AddressSaveData;
import com.extension.company.model.entity.PayForInfor;

import java.io.File;
import java.io.FileDescriptor;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;

/**
 * 作者：zwk
 * 时间：on 2019/2/28 22:21
 * 功能：请求接口
 */
public interface RetrofitUrlApi {

	/**
	 * 服务器的主机地址
	 */
//	String BaseHostUrl = "https://www.17xiangke.net/web/";
	/**
	 * 主机地址
	 */
	public static final String BaseHostUrl = "http://www.17xiangke.cn";

	/**
	 * 获取收货地址
	 *
	 * @param sign  标识
	 * @param token token
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/user/shipAddress")
	Observable<AddressListData> AddressList(@Field("sign") String sign, @Field("token") String token);


	/**
	 * 收货地址删除
	 *
	 * @param store_id
	 * @param r
	 * @param address_id
	 * @param access_token
	 * @return
	 */
	@FormUrlEncoded
	@POST("index.php?")
	Observable<AddressListDelData> postAddressDel(@Query("store_id") String store_id, @Query("r") String r, @Query("address_id") String address_id, @Query("access_token") String access_token);


	/**
	 * 新增收货地址
	 *
	 * @param map 请求信息
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/user/addAddress")
	Observable<AddressSaveData> postAddAddress(@FieldMap Map<String, String> map);

	/**
	 * 编辑收货地址
	 *
	 * @param map 请求信息
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("api/user/editAddress")
	Observable<AddressSaveData> postEditAddress(@FieldMap Map<String, String> map);


	/**
	 * 商家入驻上传 图片和参数
	 *
	 * @param aa
	 * @param bb
	 * @param file
	 * @return
	 */
	@POST()
	@Multipart
	Observable<String> merchantEnter(@Part("") String aa, @Part("") String bb, @Part MultipartBody.Part file);

	/**
	 * 功能：首页头部网络请求
	 *
	 * @param tokenBean 首页post 请求，提交的token
	 * @return 返回的
	 */
	@POST("/api/index/index")
	Observable<ListHeadBean> postHeader(@Body TokenBean tokenBean);

	/**
	 * 首页 热门活动
	 *
	 * @param sign 请求的标识
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/index/hotStore")
	Observable<HotDataListBean> postHotData(@Field("sign") String sign);

	/**
	 * 功能：微信登录
	 *
	 * @param sign 请求的标识
	 * @param code 微信授权获取的code
	 * @return 后台服务器返回的对象
	 */
	@FormUrlEncoded
	@POST("/api/login/login")
	Observable<LoginBean> wxLogin(@Field("sign") String sign, @Field("code") String code);

	/**
	 * 功能：商品分类
	 *
	 * @param sign
	 * @return
	 */
	@FormUrlEncoded
	@POST("/api/type/firstType")
	Observable<LeftListBean> left(@Field("sign") String sign);

	/**
	 * @param sign        请求标识
	 * @param category_id 分类的id
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/type/getGoods")
	Observable<RightListBean> right(@Field("sign") String sign, @Field("category_id") int category_id, @Field("count") int count);


	/**
	 * 退出登录
	 *
	 * @param sign  请求的标识
	 * @param token 请求的token值
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/login/logout")
	Observable<LoginQuite> LoginOut(@Field("sign") String sign, @Field("token") String token);

	/**
	 * 获取通知列表
	 *
	 * @param sign 请求的标识
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/msg/getMsgList")
	Observable<MessageBean> MessageList(@Field("sign") String sign);

	/**
	 * 获取后台穿过来的省市区的json
	 *
	 * @param sign  标识
	 * @param token token
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/user/getArea")
	Observable<ProvinceCityBean> ProvinceCity(@Field("sign") String sign, @Field("token") String token);

	/**
	 * 删除收货地址
	 *
	 * @param sign  标识
	 * @param token token
	 * @param id    某个item的id
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/user/delAddress")
	Observable<AddressListDelData> DeleteAddress(@Field("sign") String sign, @Field("token") String token, @Field("id") String id);

	/**
	 * 商品详情和评论的
	 *
	 * @param sign    标识
	 * @param goodsId 商品的id
	 * @return 订阅
	 */
	// @Field("token") String token,
	@FormUrlEncoded
	@POST("/api/type/detail")
	Observable<GoodsInfoDetail2> GoodsAndCommit(@Field("sign") String sign, @Field("goods_id") int goodsId);

	/**
	 * 获取支付的信息
	 *
	 * @param sign         标记
	 * @param token        token
	 * @param goods_id     商品的id
	 * @param goods_sku_id 商品的规格
	 * @param goods_num    商品的数量
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/order/wxNewPay")
	Observable<PayForInfor> payForInfor(@Field("sign") String sign,
										@Field("token") String token,
										@Field("goods_id") String goods_id,
										@Field("goods_sku_id") String goods_sku_id,
										@Field("goods_num") String goods_num
	); //   @param address_id    商品的收货地址 @Field("address_id") String address_id

	/**
	 * 确认订单支付后的状态
	 *
	 * @param sign         标签
	 * @param token        token
	 * @param out_trade_no 订单号
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/order/orderQuery")
	Observable<PaySuccessBean> commitOrderStatus(
			@Field("sign") String sign,
			@Field("token") String token,
			@Field("out_trade_no") String out_trade_no
	);

	/**
	 * 获取分销商品的列表
	 *
	 * @param sign  标签
	 * @param token token
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/order/orderOver")
	Observable<RetailGoosListBean> retailList(@Field("sign") String sign, @Field("token") String token);


	/**
	 * 线上订单加入购物车
	 *
	 * @param sign         标签
	 * @param token        token
	 * @param goods_id     商品的id
	 * @param goods_num    商品的数量
	 * @param goods_sku_id 商品的规格
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/cart/add")
	Observable<AddMyShopCart> addCart(@Field("sign") String sign,
									  @Field("token") String token,
									  @Field("goods_id") String goods_id,
									  @Field("goods_num") String goods_num,
									  @Field("goods_sku_id") String goods_sku_id
	);

	@FormUrlEncoded
	@POST("/api/Cart/cartPay")
	Observable<PayForInfor> carBuy(@Field("sign") String sign,
								   @Field("token") String token,
								   @Field("goods_info") String goods_info);

	/**
	 * 获取购物车的订单
	 *
	 * @param sign  标签
	 * @param token token
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/cart/getList")
	Observable<CarShopBean> shopCarList(@Field("sign") String sign,
										@Field("token") String token);

	/**
	 * @param sign       标签
	 * @param token      token
	 * @param goods_info 商品的
	 * @param area_id
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/Cart/cartList")
	Observable<OrderConfirmCarListBean> carList(@Field("sign") String sign,
												@Field("token") String token,
												@Field("goods_info") String goods_info,
												@Field("area_id") String area_id);

	/**
	 * 设置默认的收货地址
	 *
	 * @param sign  标签
	 * @param token token
	 * @param id    地址的id
	 * @return 订阅
	 */
	@FormUrlEncoded
	@POST("/api/user/setDefaultAddress")
	Observable<String> defaultAddress(@Field("sign") String sign,
									  @Field("token") String token,
									  @Field("id") int id);
}
